package com.xingchen.feima.system.utils;

import com.xingchen.feima.system.entity.Menu;
import com.xingchen.feima.system.entity.vo.MetaVo;
import com.xingchen.feima.system.entity.vo.RouteVo;
import org.springframework.util.CollectionUtils;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

/**
 *根据菜单数据构建路由的工具类
 */
public class RouterHelper {

    /**
     * 根据菜单构建路由
     * @param menus
     * @return
     */
    public static List<RouteVo> buildRouters(List<Menu> menus) {
        List<RouteVo> routers = new LinkedList<RouteVo>();
        for (Menu menu : menus) {
            RouteVo router = new RouteVo();
            router.setHidden(false);
            router.setAlwaysShow(false);
            router.setPath(getRouterPath(menu));
            router.setComponent(menu.getComponentPath());
            router.setMeta(new MetaVo(menu.getName(), menu.getIcon()));

            List<Menu> children = menu.getChildren();
            // 如果类型为2 且组件路径不存在 则为按钮；   如果类型为2 且组件路径有 则为影藏的菜单 需要添加到上一级菜单列表中； 其他的需要加到children中
            List<Menu> chidMneuList = new ArrayList<>();
            for (Menu child : children) {
                if (child.getType() == 2) {
                    if (!child.getComponentPath().isEmpty()) {
                        RouteVo hiddenRouter = new RouteVo();
                        hiddenRouter.setHidden(true);
                        hiddenRouter.setAlwaysShow(false);
                        hiddenRouter.setPath(getRouterPath(child));
                        hiddenRouter.setComponent(child.getComponentPath());
                        hiddenRouter.setMeta(new MetaVo(child.getName(), child.getIcon()));
                        routers.add(hiddenRouter);
                    }
                } else  {
                    chidMneuList.add(child);
                }
            }

            if (!CollectionUtils.isEmpty(chidMneuList)) {
                if (chidMneuList.size() > 0) {
                    router.setAlwaysShow(true);
                }
                router.setChildren(buildRouters(chidMneuList));
            }
            routers.add(router);
        }
        return routers;
    }

    /**
     * 获取路由地址
     *
     * @param menu 菜单信息
     * @return 路由地址
     */
    public static String getRouterPath(Menu menu) {
        String routerPath = "/" + menu.getRoutePath();
        if(menu.getParentId().intValue() != 0) {
            routerPath = menu.getRoutePath();
        }
        return routerPath;
    }
}
